package ch9.thread4;

import java.math.BigDecimal;
import java.util.Random;

public class MoneyTaker extends Thread {
	private Account ac;

	public MoneyTaker(String n, Account ac) {
		super(n);
		this.ac = ac;
	}

	Random r = new Random();

	// 同步的
	// public void takeMoney() {
	// int m = r.nextInt(500);
	// synchronized (ac) {
	// if (ac.getMoney() >= m) {
	// try {
	// sleep((long) (50 * Math.random()));
	//
	// double get = ac.withDraw(m);
	// // 耗时的操作
	// System.out.println(super.getName() + "取钱" + m + "元,实际取了"
	// + get + "元，现在余额是" + ac.getMoney() + "元");
	//
	// } catch (InterruptedException e) {
	// // TODO 自动生成的 catch 块
	// e.printStackTrace();
	// }
	// }
	// }
	// }
	public void takeMoney() {
		int m = r.nextInt(500);
		synchronized (ac) {
			while (ac.getMoney() < m) {
				System.out.println(super.getName() + "取钱" + m + "元,不够了,现在余额是"
						+ ac.getMoney() + "元，等着");
				try {
					ac.wait();// 等着
					// 收到了通知
					System.out.println(super.getName() + "收到了通知，准备取钱" + m
							+ "元,现在余额是" + ac.getMoney() + "元");

				} catch (InterruptedException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}// 等着
			}
			double get = ac.withDraw(m);
			System.out.println(super.getName() + "取钱" + m + "元,实际取了" + get
					+ "元，现在余额是" + ac.getMoney() + "元");
			try {
				sleep((long) (50 * Math.random()));
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}

	@Override
	public void run() {
		while (true) {
			takeMoney();
		}
	}
}
